home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 142
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin
/
imelo
/
cmscc
/
hdge_j80.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-02-06
|
3KB
|
132 lines
/*
H"(SANYO PHS-J80)用MML変換
*/
#include <stdio.h>
/*
入力されるプリプロセス例:
一応、
On?fl
|||+-音長('1','2','3','4','6','8',16='H')
||+--#フラグ('+'or'0'なし)
|+---音名('C','D','E','F','G','A','B'or'R')
+----オクターブ('3','4','5')
が保証
*/
int CMSCC_conv23_HDGE_J80(src,dest,err)
unsigned char *src,*dest,*err;
{
unsigned char *s,*d,*e;
unsigned char oct, //オクターブ
name, //音名
sharp, //#
len; //音長
unsigned char skip, //スキップコード
p; //実際に押すボタン
short times,tn; //ボタンを押す回数
s=src;
d=dest; *d=NULL;
e=err;
while( *s ){
/* 読み込み
*/
skip=0;
switch( *s ){
case 'O':
s++;
oct=*s++;
name=*s++;
sharp=*s++;
len=*s++;
break;
case ' ': case 0x0d: case 0x0a: case '\t':
skip=*s++;
break;
}
/* 書きだし
*/
if( skip==0 ){
times=0;
switch(name){
case 'C': p='1'; switch(oct){
case '4': times=(sharp=='+')?2:1; break;
case '5': times=(sharp=='+')?4:3; break;
}break;
case 'D': p='2'; switch(oct){
case '3': times=(sharp=='+')?4:3; break;
case '4': times=(sharp=='+')?2:1; break;
case '5': times=(sharp=='+')?6:5; break;
}break;
case 'E': p='3'; switch(oct){
case '3': times=2; break;
case '4': times=1; break;
case '5': times=3; break;
}break;
case 'F': p='4'; switch(oct){
case '3': times=(sharp=='+')?4:3; break;
case '4': times=(sharp=='+')?2:1; break;
case '5': times=(sharp=='+')?6:5; break;
}break;
case 'G': p='5'; switch(oct){
case '3': times=(sharp=='+')?4:3; break;
case '4': times=(sharp=='+')?2:1; break;
case '5': times=(sharp=='+')?6:5; break;
}break;
case 'A': p='6'; switch(oct){
case '3': times=(sharp=='+')?4:3; break;
case '4': times=(sharp=='+')?2:1; break;
case '5': times=(sharp=='+')?6:5; break;
}break;
case 'B': p='7'; switch(oct){
case '3': times=2; break;
case '4': times=1; break;
case '5': times=3; break;
}break;
case 'R':
p='0';
times=1;
break;
}
if( times ){
for( tn=0; tn<times; tn++ ){
*d++=p;
}
}
switch(len){
case '4': break; //デフォルト
case '8': p='*'; *d++=p; break;
case 'H': p='*'; *d++=p;*d++=p; break;
case '2': p='#'; *d++=p; break;
case '1': p='#'; *d++=p;*d++=p; break;
case '3': p='9'; *d++=p; break;
case '6':
p='9'; *d++=p;
p='*'; *d++=p;
break;
}
*d++='>'; //次の文字へマーク
}
else{
//*d++=skip;
}
}
*d++=NULL;
}